﻿using System;

namespace _06运算符
{
    class Program
    {
        //1.算术运算符：+ - * / % ++ --
        //++自增 --自减 ++在前值直接增加 ++在后下一次运行的时候增加
        //--在前直接减少，--在后下一次运行的时候减少
        //2.关系运算符：> >= < <= ==
        //3.逻辑运算符：&& || !
        //4.赋值运算符：= *= /= %=
        
        static void Main(string[] args)
        {
            int b = 11;
            int a = 10;

            Console.WriteLine(a+b);

            Console.WriteLine(a-b);

            Console.WriteLine(a*b);//星号代表 乘号

            Console.WriteLine(a/b);//斜杠代表 除号

            Console.WriteLine(a%b);//百分号代表 取于 两数相除，除不尽的情况下余下来的数叫余数

            Console.WriteLine("-------------");

            Console.WriteLine(a++);//加加在后 下次运行增加

            Console.WriteLine(++a);//加加在前 直接增加

            Console.WriteLine("-----------");

            Console.WriteLine(a--);//减减在后 下次运行减少

            Console.WriteLine(--a);//减减在前 直接减少

            //关系运算符：== != > < >= <=
            int d = 10;
            int e = 11;
            Console.WriteLine(d == e);
            Console.WriteLine(d != e);
            Console.WriteLine(d > e);
            Console.WriteLine(d < e);
            int f = 11;
            int g = 11;
            Console.WriteLine(f >= g);
            g = 12;
            Console.WriteLine(f < g);

            Console.WriteLine("----逻辑运算符----");
            //逻辑运算符：&& || !
            bool ab = true;
            bool bb = false;
            Console.WriteLine(ab&&bb);//%% 多个断言同时成立
            Console.WriteLine(ab||bb);//|| 多个断言成立一个即可
            Console.WriteLine(!ab);//！ 对原有的判断结果取反，如果是true 就翻转成false
            Console.WriteLine(!bb);

            //赋值运算符：= += -= *= /= %=
            int cf = 10;
            Console.WriteLine(cf+=5);
            Console.WriteLine(cf-=6);
            Console.WriteLine(cf/=3);
            Console.WriteLine(cf%=3);

            //其他运算符 ？：三目运算符 is判定是否为你指定的类型 as类型的强制转换
            //sizeof，size 尺寸 of 对于什么 求一个东西的尺寸
            //typeof type 类型 of 返回对象的类型
            bool 有钱 = true;
            var result = 有钱 ? "喝咖啡" : "喝白开水";
            Console.WriteLine(result);
            object o = GetClass();
            Console.WriteLine(o is MyCalss);//o是否是Myclass这个类型 true
            Console.WriteLine(o is MyClassSon);//o是否是MyClassson这个类型 true 因为Myclassson继承于Myclass
            Console.WriteLine(o is Program);//false
            //Console.WriteLine(o.age); 不能直接获取类型中的age字段，需要涉及类型转换
            Console.WriteLine((o as MyClassSon).age);//通过as来强转成Myclassson
            Console.WriteLine(((MyClassSon)o).age);

            Console.WriteLine(typeof(MyCalss));//获取一个类的类型（获取你的type信息），返回的type
            var t = typeof(MyClassSon);
            Console.WriteLine(t.BaseType);

            Console.WriteLine(sizeof(int));//返回数据类型的字节 ，4
            Console.WriteLine(sizeof(long));//8
            Console.WriteLine(sizeof(short));//2
        }
        static object GetClass()
        {
            return new MyClassSon();
        }   
    }
}
class MyCalss
{

}
class MyClassSon:MyCalss
{
    public int age;
    public MyClassSon()
    {
        age = 100;
    }
}
